package crs.solicitudes.facade;

import java.util.List;
import java.util.Locale;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.MessageSource;
import org.springframework.transaction.annotation.Transactional;

import crs.auxiliares.beans.JsonJTableOptionsBean;
import crs.exceptions.EmailExistsException;
import crs.exceptions.UserExistsException;
import crs.informes.forms.InformeForm;
import crs.informes.model.CrsInformes;
import crs.perfiles.forms.UsersForm;
import crs.perfiles.model.CrsPerfilCentro;
import crs.perfiles.model.CrsPerfilEmpleado;
import crs.perfiles.tablebean.response.JsonJTableCompartidasListResponse;
import crs.perfiles.tablebean.response.JsonJTableCompartidasResponse;
import crs.solicitudes.forms.SolicitudesForm;
import crs.solicitudes.forms.SolicitudesSearchForm;
import crs.solicitudes.model.CrsSolicitudes;
import crs.solicitudes.sesiones.exceptions.SesionException;
import crs.solicitudes.sesiones.model.CrsSesiones;
import crs.solicitudes.tablebean.JsonJTableSolicitudesBean;
import crs.users.model.Users;
@Transactional
public interface SolicitudesFacade {
	
	Users altaUsuario(UsersForm userForm, Integer integer, ServletContext context, MessageSource ms, Locale locale, HttpServletResponse response) throws EmailExistsException, UserExistsException;
	CrsSesiones altaSolicitud(SolicitudesForm sf, Integer attribute, String role)throws SesionException;
	List<JsonJTableSolicitudesBean> listSolicitudes(int jtStartIndex,
			int jtPageSize, String jtSorting, Integer userid , Locale locale, SolicitudesSearchForm solf, String role);
	int numSolicitudes(Integer userid,  SolicitudesSearchForm sf, String role);
	CrsSolicitudes findById(long id);
	List<JsonJTableOptionsBean> listEstados(String role, MessageSource resource, Locale locale);
	CrsSolicitudes editarSolicitud(long id, int userid, InformeForm inf);
	List<JsonJTableOptionsBean> listTodosLosEstados(MessageSource resource, Locale locale);
	CrsSolicitudes cargarSolicitud(long id, InformeForm inf);
	CrsInformes cargarInforme(long solicitud);
	void imprimirDatosAcceso(Users us, Integer attribute,
			ServletContext context, MessageSource resource, Locale locale,
			HttpServletResponse response);
	List<JsonJTableOptionsBean> listIdSolicitudes(Integer userid, String role);
	
}
